package com.example.config;

import com.alibaba.cloud.ai.memory.redis.JedisRedisChatMemoryRepository;
import org.springframework.ai.chat.memory.ChatMemory;
import org.springframework.ai.chat.memory.MessageWindowChatMemory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @auther zzyybs@126.com
 * @create 2025-07-28 18:24
 * @Description Redis记忆配置类
 * 
 * JedisRedisChatMemoryRepository 配置说明:
 * 1. JedisRedisChatMemoryRepository 是 Spring AI Alibaba 提供的基于 Jedis 的 Redis 记忆存储实现
 * 2. 它将对话历史存储在 Redis 中，支持持久化和分布式环境下的会话管理
 * 3. 需要配置 Redis 连接参数（host, port等）
 * 
 * MessageWindowChatMemory 配置说明:
 * 1. MessageWindowChatMemory 是一种滑动窗口记忆策略
 * 2. 它只保留最近的 N 条消息，防止记忆过长导致性能问题
 * 3. 通过 maxMessages 参数控制保留的消息数量
 * 
 * 注意：在 spring-ai-alibaba-starter-memory-redis 1.0.0.3 版本中，
 * RedisChatMemoryRepository 已被重命名为具体的实现类：
 * - JedisRedisChatMemoryRepository (基于 Jedis)
 * - LettuceRedisChatMemoryRepository (基于 Lettuce)
 * - RedissonRedisChatMemoryRepository (基于 Redisson)
 */
@Configuration
public class RedisMemoryConfig {
    @Value("${spring.data.redis.host}")
    private String host;
    
    @Value("${spring.data.redis.port}")
    private int port;

    /**
     * 创建 JedisRedisChatMemoryRepository Bean
     * 用于将对话历史存储在 Redis 中
     * @return JedisRedisChatMemoryRepository 实例
     */
    @Bean
    public JedisRedisChatMemoryRepository jedisRedisChatMemoryRepository() {
        return JedisRedisChatMemoryRepository.builder()
                .host(host)
                .port(port)
                .build();
    }
}